//package com.lichuang.fruitvarietysm.user.controller;
//
//import com.lichuang.fruitvarietysm.user.entity.ShippingAddress;
//import com.lichuang.fruitvarietysm.user.entity.User;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.Model;
//import org.springframework.web.bind.annotation.ModelAttribute;
//import org.springframework.web.bind.annotation.PostMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestParam;
//
//import javax.servlet.http.HttpServletRequest;
//import java.util.List;
//import java.util.Map;
//
//@Controller
//public class IndexController {
//
//    @Autowired
//    private UserController userController;
//
//    @Autowired
//    private AccountSecurityController accountSecurityController;
//
//    @Autowired
//    private SecurityQuestionController securityQuestionController;
//
//    @Autowired
//    private ShippingAddressController shippingAddressController;
//
//    @Autowired
//    private StringRedisTemplate redisTemplate;
//
//    /**
//     * 每次进入此controller都会将此方法的返回值放到Model中
//     * 通过session中的id来读取User（缓存的方式）
//     *
//     * @param request
//     * @return
//     */
//    @ModelAttribute("user")
//    public User addUserInModel(HttpServletRequest request) {
//        return userController.showUserInfo(request);
//    }
//
//    @RequestMapping("/sh")
//    public String sh(){
//        return "shippingaddress";
//    }
//
//
//    @RequestMapping("/sendSmaPage")
//    public String sendSmsPage() {
//        return "sendSms";
//    }
//    @RequestMapping("/login")
//    public String login(){
//        return "login";
//    }
//
//
//    /**
//     * 用户首页
//     *
//     * @param model
//     * @return
//     */
//    @PostMapping("/userHomePage")
//    public String userHomePage(Model model) {
//        if (model.asMap().get("user") == null) {
//            // 为null表示没有登录或session过期，返回登录页面或错误页面
//            return "";
//        }
//        // 返回用户首页
//        return "";
//    }
//
//    /**
//     * 用户账户设置首页
//     *
//     * @param model
//     * @return
//     */
//    @PostMapping("/accountPage")
//    public String accountPage(Model model) {
//        if (model.asMap().get("user") == null) {
//            // 为null表示没有登录或session过期，返回登录页面或错误页面
//            return "";
//        }
//        // 返回账户设置的页面
//        return "";
//    }
//
//    /**
//     * 修改邮箱页面
//     *
//     * @param model
//     * @return
//     */
//    @RequestMapping("/modifyEmailPage")
//    public String modifyEmailPage(Model model) {
//        if (model.asMap().get("user") == null) {
//            // 为null表示没有登录或session过期，返回登录页面或错误页面
//            return "";
//        }
//        // 返回修改邮箱的页面
//        return "";
//    }
//
//    /**
//     * 修改密码页面
//     *
//     * @param model
//     * @return
//     */
//    @RequestMapping("/modifyPassWordPage")
//    public String modifyPassWordPage(Model model) {
//        if (model.asMap().get("user") == null) {
//            // 为null表示没有登录或session过期，返回登录页面或错误页面
//            return "";
//        }
//        // 返回修改密码的页面
//        return "";
//    }
//
//    /**
//     * 通过验证邮箱修改密码的页面
//     *
//     * @param model
//     * @return
//     */
//    @RequestMapping("/modifyPassWordWithEmailPage")
//    public String modifyPassWordWithEmailPage(Model model, HttpServletRequest request) {
//        if (model.asMap().get("user") == null) {
//            // 为null表示没有登录或session过期，返回登录页面或错误页面
//            return "";
//        }
//        // 发送验证的邮箱
//        accountSecurityController.sendValidateEmailForModifyPwd(request);
//        // 返回验证邮箱修改密码的页面
//        return "";
//    }
//
//    // 绑定邮箱的邮箱验证
//    @RequestMapping("/validateEmailForBindEmail")
//    public String validateEmailForBindEmail(String token, Integer userId, String email) {
//        String key = "emailTokenForBindEmail::" + userId;
//        String tokenInRedis = redisTemplate.opsForValue().get(key);
//        // 读取redis中存储的用户Id即将要绑定的email
//        String userIdEmailKey = "userIdEmail::" + userId;
//        String userIdEmail = redisTemplate.opsForValue().get(userIdEmailKey);
//        if (token.equals(tokenInRedis)) {
//            // redis中的token和请求token一致，接着判断email是否和userId对应
//            if (email.equals(userIdEmail)) {
//                accountSecurityController.modifyEmailById(userId, email);
//                redisTemplate.delete(key);
//                redisTemplate.delete(userIdEmailKey);
//                // 绑定邮箱成功的页面
//                return "";
//            }
//
//        }
//        // 链接失效，可能过期了
//        return "";
//    }
//
//    /**
//     * 通过验证邮箱修改密码的页面
//     * 1.用户点击邮箱中的链接，判断userId和token是否对应，对应就跳转到修改密码页面，不对应返回链接过期
//     * 2.用户填写新密码，发送请求
//     * 3.判断参数中的userId和token是否对应（防止用户修改userId）
//     * 4.对应就重置密码，删除redis中对应的值，否则提示操作失败
//     *
//     * @param token
//     * @param userId
//     * @return
//     */
//    // 修改密码的验证邮箱
//    @RequestMapping("/validateEmailForModifyPwd")
//    public String validateEmailForModifyPwd(String token, Integer userId) {
//        String key = "emailTokenForModifyPwd::" + userId;
//        String tokenInRedis = redisTemplate.opsForValue().get(key);
//        if (token.equals(tokenInRedis)) {
//            // redis中的token和请求的token一致，跳转到重置密码页面
//            return "";
//        }
//        // 链接失效，可能过期了
//        return "";
//    }
//
//
//
//    @RequestMapping("/modifySuccessPage")
//    public String modifySuccessPage() {
//        // 返回修改成功的页面
//        return "";
//    }
//
//    @RequestMapping("/modifyPwdWithSecurityQuestionPage")
//    public String modifyPwdWithSecurityQuestionPage(HttpServletRequest request,Model model){
//        if (model.asMap().get("user") == null) {
//            // 为null表示没有登录或session过期，返回登录页面或错误页面
//            return "";
//        }
//        // 通过密保问题修改密码的页面
//        Map map =securityQuestionController.selectUserSecuriyQuestion(request);
//        return "";
//    }
//
//    /**
//     * 使用短信修改密码的页面
//     * @param model
//     * @return
//     */
//    @PostMapping("/modifyPwdWithSmsPage")
//    public String modifyPwdWithSmsPage(Model model){
//        if (model.asMap().get("user") == null) {
//            // 为null表示没有登录或session过期，返回登录页面或错误页面
//            return "";
//        }
//        User user = (User) model.asMap().get("user");
//        // 发送短信
//        userController.sendSms(user.getUserPhone());
//        // 使用短信修改密码的页面
//        return "";
//    }
//
//    /**
//     * 修改密保问题页面
//     * @param model
//     * @return
//     */
//    @RequestMapping("/modifyQuestion")
//    public String modifyQuestion(Model model) {
//        if (model.asMap().get("user") == null) {
//            // 为null表示没有登录或session过期，返回登录页面或错误页面
//            return "";
//        }
//        // 返回修改密保问题的页面
//        return "";
//    }
//
//    /**
//     * 收获地址页面，并查询用户收货地址，如果没有参数，Model值中没有值；如果有参数，model中添加收获地址信息
//     * @param shippingId
//     * @param model
//     * @return
//     */
//    @RequestMapping("/shippingAddressPage")
//    public String shippingAddressPage(@RequestParam(required = false)Integer shippingId,Model model){
//        User user = (User) model.asMap().get("user");
//        if (user == null) {
//            // 为null表示没有登录或session过期，返回登录页面或错误页面
//            return "";
//        }
//        // 查询用的收货地址列表，并放入model中
//        List<ShippingAddress> shippingAddressList = shippingAddressController.selectShippingAddress(user.getUserId());
//        model.addAttribute("shippingAddressList",shippingAddressList);
//
//        // 如果参数存在shippingId，就代表表单中需要显示修改的收货地址，所以将具体的收获地址放入model中
//        if (shippingId == null){
//            return "";
//        }
//        ShippingAddress shippingAddress = shippingAddressController.selectShippingAddressById(shippingId);
//        model.addAttribute("shippingAddress",shippingAddress);
//        return "";
//    }
//
//    @RequestMapping("/uploadUserPhoto")
//    public String uploadUserPhoto(){
//        return "uploadPhoto";
//    }
//}
